Вставьте модуль в плату следующим образом, обращая внимание на то, чтобы стрелки были выровнены. Кроме того, соедините P2 с помощью перемычки на +3.3V, чтобы питание модуля было 3.3V.
Цель, которую мы хотим достичь, — отображать видеопоток с двух камер в реальном времени как на HDMI, так и на LCD. Подход к реализации заключается в использовании 2 модулей VDMA только для записи для передачи данных камеры в DDR, затем использование двух модулей VDMA только для чтения для извлечения данных из DDR и их отображения на HDMI и LCD соответственно через IP-ядро v_axi4s_vid_out_0 и IP-ядро v_axi4s_vid_out_1. Поскольку этот тест включает в себя как HDMI, так и LCD, нам необходимо сослаться на некоторый инженерный код из предыдущих тестов HDMI и LVGL.
Модифицируем на основе предыдущего проекта HDMI: сначала включим два вывода EMIO для подключения к интерфейсу SCCB камеры и настроим ограничения выводов следующим образом:
#cam_scl:set_property -dict {PACKAGE_PIN Y13 IOSTANDARD LVCMOS33} [get_ports {GPIO_0_0_tri_io[9]}]#cam_sda:set_property -dict {PACKAGE_PIN Y12 IOSTANDARD LVCMOS33} [get_ports {GPIO_0_0_tri_io[10]}]#pull upset_property PULLUP true [get_ports {emio_sccb_tri_io[9]}]set_property PULLUP true [get_ports {emio_sccb_tri_io[10]}]Измените три тактовых сигнала FCLK Zynq IP-ядра на 100, 125 и 200. Среди них FCLK_CLK2 служит тактовым сигналом для расширенного ENET1.
Найдите vdma, чтобы добавить:
Настройте четыре модуля vdma: два для чтения и два для записи, и установите параметры в соответствии с рисунками ниже.
Два VDMA только для чтения:
Конфигурация двух VDMA только для записи:
Добавьте два IP-ядра clk_wiz, одно для управления тактовой частотой дисплея HDMI и одно для управления тактовой частотой дисплея LCD. Найдите clk:
Настройте IP clk_wiz для HDMI: установите его как динамическую тактовую частоту, управляемую шиной AXI, с входным сигналом от FCLK_CLK0 на 100 МГц:
HDMI требует две тактовые частоты, которые имеют соотношение 5x:
Настройте IP clk_wiz для LCD: установите его как динамическую тактовую частоту, управляемую шиной AXI, с входным сигналом от FCLK_CLK0 на 100 МГц:
Для LCD требуется только один выход тактовой частоты:
Обратитесь к предыдущему документу HDMI Test, чтобы добавить другие необходимые IP-ядра для отображения HDMI:
Добавьте и найдите timing core и настройте его, как показано ниже:
Найдите video out core и настройте его, как показано ниже:
Требуется пользовательское IP: dvi_transmitter. Это IP-ядро находится в папке ip_repo каталога проекта. Нам нужно добавить его в библиотеку IP проекта. В Block Design подключите сигналы интерфейса модуля DVI Transmitter и выведите внешние порты (только порты TMDS нужно выводить). Конкретный способ подключения показан на следующих рисунках:
Следуя тем же шагам, что и выше, найдите наше пользовательское IP-ядро ov5640_capture и добавьте его в библиотеку IP проекта.
Найдите v_vid_in_axi4s. Функция этого модуля — преобразовать выход стандартного видеоформата в поток данных AXI4-Stream. Настройте его:
Подключите ov5640, v_vid_in_axi4s и vdma для операции чтения, как показано ниже:
Обратитесь к документу LVGL Test, чтобы добавить модуль video out. Этот модуль преобразует поток данных AXI4-Stream в выход стандартного видеоформата, соответствующий экрану RGB LCD.
Добавьте модуль Video Timing Controller: найдите и добавьте модуль контроллера синхронизации видео, дважды щелкните, чтобы открыть страницу конфигурации, и настройте его:
Добавьте модуль constant, чтобы добавить постоянное значение 1, используемое для подключения сигналов разрешения ce и aclken наших различных модулей.
Для последующих подключений обратитесь к документу LVGL Test. На этом этапе нажмите Run Connection Automation, чтобы автоматически подключить оставшуюся проводку. После проверки всех пунктов во всплывающем диалоговом окне настроек система автоматически подключит оставшиеся сигнальные линии и добавит необходимые модули. Итоговая сгенерированная общая блок-схема выглядит следующим образом:
Сохраните проект, затем нажмите Source → Design Sources, щелкните правой кнопкой мыши созданный нами проект BLOCK и нажмите Create HDL Wrapper, чтобы упаковать файл BLOCK. На этом этап Block Design завершен.
Настройте выводы в соответствии со схематической диаграммой: Настроенный .xdc:
x#----------------------Clock for the camera interface---------------------------#72Mcreate_clock -period 13.888 -name camera_pclk [get_ports camera_pclk_0]#set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets camera_pclk_0_IBUF]
create_clock -period 13.888 -name camera_pclk [get_ports camera_pclk_1]#set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets camera_pclk_1_IBUF]
#----------------------Camera interface 1---------------------------set_property -dict {PACKAGE_PIN U14 IOSTANDARD LVCMOS33} [get_ports camera_rstn_0]set_property -dict {PACKAGE_PIN U15 IOSTANDARD LVCMOS33} [get_ports camera_pwdn_0]set_property -dict {PACKAGE_PIN U10 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[0]}]set_property -dict {PACKAGE_PIN Y11 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[1]}]set_property -dict {PACKAGE_PIN W11 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[2]}]set_property -dict {PACKAGE_PIN U7 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[3]}]set_property -dict {PACKAGE_PIN V7 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[4]}]set_property -dict {PACKAGE_PIN W6 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[5]}]set_property -dict {PACKAGE_PIN V6 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[6]}]set_property -dict {PACKAGE_PIN U5 IOSTANDARD LVCMOS33} [get_ports {camera_data_0[7]}]set_property -dict {PACKAGE_PIN W13 IOSTANDARD LVCMOS33} [get_ports camera_href_0]set_property -dict {PACKAGE_PIN T9 IOSTANDARD LVCMOS33} [get_ports camera_pclk_0]set_property -dict {PACKAGE_PIN V12 IOSTANDARD LVCMOS33} [get_ports camera_vsync_0]#cam_scl:set_property -dict {PACKAGE_PIN T11 IOSTANDARD LVCMOS33} [get_ports {GPIO_0_0_tri_io[7]}]#cam_sda:set_property -dict {PACKAGE_PIN T10 IOSTANDARD LVCMOS33} [get_ports {GPIO_0_0_tri_io[8]}]#pull upset_property PULLUP true [get_ports {GPIO_0_0_tri_io[7]}]set_property PULLUP true [get_ports {GPIO_0_0_tri_io[8]}]
#----------------------Camera interface 2---------------------------set_property -dict {PACKAGE_PIN Y6 IOSTANDARD LVCMOS33} [get_ports camera_rstn_1]set_property -dict {PACKAGE_PIN Y8 IOSTANDARD LVCMOS33} [get_ports camera_pwdn_1]set_property -dict {PACKAGE_PIN T5 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[0]}]set_property -dict {PACKAGE_PIN V11 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[1]}]set_property -dict {PACKAGE_PIN V10 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[2]}]set_property -dict {PACKAGE_PIN W10 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[3]}]set_property -dict {PACKAGE_PIN W9 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[4]}]set_property -dict {PACKAGE_PIN U9 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[5]}]set_property -dict {PACKAGE_PIN U8 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[6]}]set_property -dict {PACKAGE_PIN W8 IOSTANDARD LVCMOS33} [get_ports {camera_data_1[7]}]set_property -dict {PACKAGE_PIN V8 IOSTANDARD LVCMOS33} [get_ports camera_href_1]set_property -dict {PACKAGE_PIN Y7 IOSTANDARD LVCMOS33} [get_ports camera_pclk_1]set_property -dict {PACKAGE_PIN Y9 IOSTANDARD LVCMOS33} [get_ports camera_vsync_1]#cam_scl:set_property -dict {PACKAGE_PIN Y13 IOSTANDARD LVCMOS33} [get_ports {GPIO_0_0_tri_io[9]}]#cam_sda:set_property -dict {PACKAGE_PIN Y12 IOSTANDARD LVCMOS33} [get_ports {GPIO_0_0_tri_io[10]}]#pull upset_property PULLUP true [get_ports {emio_sccb_tri_io[9]}]set_property PULLUP true [get_ports {emio_sccb_tri_io[10]}]
# beepset_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[11]}]set_property PACKAGE_PIN K18 [get_ports {GPIO_0_0_tri_io[11]}]
# PL_KEY0set_property PACKAGE_PIN M14 [get_ports {GPIO_0_0_tri_io[0]}]# PL_KEY1set_property PACKAGE_PIN M15 [get_ports {GPIO_0_0_tri_io[1]}]# PL_LED0set_property PACKAGE_PIN N15 [get_ports {GPIO_0_0_tri_io[2]}]# PL_LED1set_property PACKAGE_PIN N16 [get_ports {GPIO_0_0_tri_io[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[0]}]
set_property PACKAGE_PIN G14 [get_ports CAN_0_0_rx]set_property PACKAGE_PIN J15 [get_ports CAN_0_0_tx]set_property IOSTANDARD LVCMOS33 [get_ports CAN_0_0_rx]set_property IOSTANDARD LVCMOS33 [get_ports CAN_0_0_tx]
#set_property IOSTANDARD LVCMOS33 [get_ports reset_rtl_0]set_property PACKAGE_PIN M19 [get_ports {TMDS_0_tmds_data_p[2]}]set_property PACKAGE_PIN G19 [get_ports {TMDS_0_tmds_data_p[1]}]set_property PACKAGE_PIN J20 [get_ports {TMDS_0_tmds_data_p[0]}]set_property PACKAGE_PIN L16 [get_ports TMDS_0_tmds_clk_p]#set_property PACKAGE_PIN F16 [get_ports reset_rtl_0]
set_property IOSTANDARD LVCMOS33 [get_ports IIC_0_0_scl_io]set_property IOSTANDARD LVCMOS33 [get_ports IIC_0_0_sda_io]set_property PACKAGE_PIN L14 [get_ports IIC_0_0_sda_io]set_property PACKAGE_PIN L15 [get_ports IIC_0_0_scl_io]
set_property PACKAGE_PIN F19 [get_ports MDIO_PHY_0_mdc]set_property PACKAGE_PIN F20 [get_ports MDIO_PHY_0_mdio_io]set_property IOSTANDARD LVCMOS33 [get_ports MDIO_PHY_0_mdc]set_property IOSTANDARD LVCMOS33 [get_ports MDIO_PHY_0_mdio_io]set_property PACKAGE_PIN E18 [get_ports {RGMII_0_rd[0]}]set_property PACKAGE_PIN E19 [get_ports {RGMII_0_rd[1]}]set_property PACKAGE_PIN D18 [get_ports {RGMII_0_rd[2]}]set_property PACKAGE_PIN E17 [get_ports {RGMII_0_rd[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_rd[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_rd[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_rd[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_rd[0]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_td[3]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_td[2]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_td[1]}]set_property IOSTANDARD LVCMOS33 [get_ports {RGMII_0_td[0]}]set_property IOSTANDARD LVCMOS33 [get_ports RGMII_0_rx_ctl]set_property IOSTANDARD LVCMOS33 [get_ports RGMII_0_rxc]set_property IOSTANDARD LVCMOS33 [get_ports RGMII_0_tx_ctl]set_property IOSTANDARD LVCMOS33 [get_ports RGMII_0_txc]set_property PACKAGE_PIN A20 [get_ports {RGMII_0_td[0]}]set_property PACKAGE_PIN B20 [get_ports {RGMII_0_td[1]}]set_property PACKAGE_PIN C20 [get_ports {RGMII_0_td[2]}]set_property PACKAGE_PIN D19 [get_ports {RGMII_0_td[3]}]set_property PACKAGE_PIN H17 [get_ports RGMII_0_rx_ctl]set_property PACKAGE_PIN H16 [get_ports RGMII_0_rxc]set_property PACKAGE_PIN D20 [get_ports RGMII_0_tx_ctl]set_property PACKAGE_PIN B19 [get_ports RGMII_0_txc]
set_property SLEW FAST [get_ports {RGMII_0_td[0]}]set_property SLEW FAST [get_ports {RGMII_0_td[1]}]set_property SLEW FAST [get_ports {RGMII_0_td[2]}]set_property SLEW FAST [get_ports {RGMII_0_td[3]}]set_property SLEW FAST [get_ports RGMII_0_tx_ctl]set_property SLEW FAST [get_ports RGMII_0_txc]
create_clock -period 8.000 -name RGMII_0_rxc -waveform {0.000 4.000} [get_ports RGMII_0_rxc]#set_clock_groups -logically_exclusive -group [get_clocks -include_generated_clocks {gmii_clk_25m_out gmii_clk_2_5m_out}] -group [get_clocks -include_generated_clocks gmii_clk_125m_out]
set_property PACKAGE_PIN K14 [get_ports UART_1_0_txd]set_property PACKAGE_PIN J14 [get_ports UART_1_0_rxd]set_property IOSTANDARD LVCMOS33 [get_ports UART_1_0_rxd]set_property IOSTANDARD LVCMOS33 [get_ports UART_1_0_txd]
set_property IOSTANDARD LVCMOS33 [get_ports IIC_1_0_scl_io]set_property IOSTANDARD LVCMOS33 [get_ports IIC_1_0_sda_io]set_property PACKAGE_PIN U13 [get_ports IIC_1_0_sda_io]set_property PACKAGE_PIN V16 [get_ports IIC_1_0_scl_io]
set_property PACKAGE_PIN V18 [get_ports lcd_de]set_property PACKAGE_PIN W18 [get_ports lcd_hsync]set_property PACKAGE_PIN W19 [get_ports lcd_vsync]set_property IOSTANDARD LVCMOS33 [get_ports lcd_de]set_property IOSTANDARD LVCMOS33 [get_ports lcd_hsync]set_property IOSTANDARD LVCMOS33 [get_ports lcd_vsync]
# Rset_property -dict {PACKAGE_PIN N17 IOSTANDARD LVCMOS33} [get_ports {lcd_data[16]}]set_property -dict {PACKAGE_PIN P18 IOSTANDARD LVCMOS33} [get_ports {lcd_data[17]}]set_property -dict {PACKAGE_PIN R18 IOSTANDARD LVCMOS33} [get_ports {lcd_data[18]}]set_property -dict {PACKAGE_PIN T17 IOSTANDARD LVCMOS33} [get_ports {lcd_data[19]}]set_property -dict {PACKAGE_PIN P15 IOSTANDARD LVCMOS33} [get_ports {lcd_data[20]}]set_property -dict {PACKAGE_PIN P16 IOSTANDARD LVCMOS33} [get_ports {lcd_data[21]}]set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports {lcd_data[22]}]set_property -dict {PACKAGE_PIN U19 IOSTANDARD LVCMOS33} [get_ports {lcd_data[23]}]# Gset_property -dict {PACKAGE_PIN N18 IOSTANDARD LVCMOS33} [get_ports {lcd_data[8]}]set_property -dict {PACKAGE_PIN P19 IOSTANDARD LVCMOS33} [get_ports {lcd_data[9]}]set_property -dict {PACKAGE_PIN W15 IOSTANDARD LVCMOS33} [get_ports {lcd_data[10]}]set_property -dict {PACKAGE_PIN V15 IOSTANDARD LVCMOS33} [get_ports {lcd_data[11]}]set_property -dict {PACKAGE_PIN R17 IOSTANDARD LVCMOS33} [get_ports {lcd_data[12]}]set_property -dict {PACKAGE_PIN R16 IOSTANDARD LVCMOS33} [get_ports {lcd_data[13]}]set_property -dict {PACKAGE_PIN R14 IOSTANDARD LVCMOS33} [get_ports {lcd_data[14]}]set_property -dict {PACKAGE_PIN P14 IOSTANDARD LVCMOS33} [get_ports {lcd_data[15]}]# Bset_property -dict {PACKAGE_PIN T16 IOSTANDARD LVCMOS33} [get_ports {lcd_data[0]}]set_property -dict {PACKAGE_PIN U17 IOSTANDARD LVCMOS33} [get_ports {lcd_data[1]}]set_property -dict {PACKAGE_PIN T15 IOSTANDARD LVCMOS33} [get_ports {lcd_data[2]}]set_property -dict {PACKAGE_PIN T14 IOSTANDARD LVCMOS33} [get_ports {lcd_data[3]}]set_property -dict {PACKAGE_PIN Y17 IOSTANDARD LVCMOS33} [get_ports {lcd_data[4]}]set_property -dict {PACKAGE_PIN Y18 IOSTANDARD LVCMOS33} [get_ports {lcd_data[5]}]set_property -dict {PACKAGE_PIN Y16 IOSTANDARD LVCMOS33} [get_ports {lcd_data[6]}]set_property -dict {PACKAGE_PIN Y14 IOSTANDARD LVCMOS33} [get_ports {lcd_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_reset[0]}]set_property PACKAGE_PIN P20 [get_ports {lcd_reset[0]}]set_property IOSTANDARD LVCMOS33 [get_ports lcd_clk]set_property PACKAGE_PIN W14 [get_ports lcd_clk]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[6]}]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[5]}]set_property IOSTANDARD LVCMOS33 [get_ports {GPIO_0_0_tri_io[4]}]# lcd_blset_property PACKAGE_PIN V17 [get_ports {GPIO_0_0_tri_io[4]}]# lcd_tp_resetset_property PACKAGE_PIN V13 [get_ports {GPIO_0_0_tri_io[5]}]# lcd_tp_intset_property PACKAGE_PIN N20 [get_ports {GPIO_0_0_tri_io[6]}]
Скомпилируйте и синтезируйте проект, сгенерируйте битстрим, File→Export→Export hardware и экспортируйте файл .xsa.
Аналогично, создайте новый проект платформы и проект приложения. Новые созданные файлы кода изменяются на основе документа 18-LVGL и кода 19-AUDIO: добавьте новый код файла, связанный с камерой: создайте новые папки emio_sccb_cfg, ov5640 и создайте новый файл xadc.c. Итоговые требуемые файлы src выглядят следующим образом:
Измените код файла clk_wiz:
xxxxxxxxxx//clk_wiz.cbool clk_wiz_cfg(uint32_t clk_device_id, double freq_MHz, double freq2_MHz){ double div_factor = 0; uint32_t div_factor_int = 0, div_factor_frac = 0; uint32_t clk_divide = 0; uint32_t status = 0;
// init XCLK_Wiz XClk_Wiz_Config *clk_cfg_ptr; clk_cfg_ptr = XClk_Wiz_LookupConfig(clk_device_id); XClk_Wiz_CfgInitialize(&clk_wiz_inst, clk_cfg_ptr, clk_cfg_ptr->BaseAddr);
if (freq_MHz <= 0) return false; // config to 10X XClk_Wiz_WriteReg(clk_cfg_ptr->BaseAddr, CLK_CFG0_OFFSET, 0x00000a01);
// ===== config clockout1 ===== div_factor = CLK_WIZ_IN_FREQ * 10 / freq_MHz; div_factor_int = (uint32_t)div_factor; div_factor_frac = (uint32_t)((div_factor - div_factor_int) * 1000); clk_divide = div_factor_int | (div_factor_frac << 8); XClk_Wiz_WriteReg(clk_cfg_ptr->BaseAddr, CLK_CFG2_OFFSET, clk_divide);
// ===== config clockout2 ===== if (freq2_MHz > 0) { double div_factor2 = CLK_WIZ_IN_FREQ * 10 / freq2_MHz; uint32_t div_factor2_int = (uint32_t)div_factor2; uint32_t div_factor2_frac = (uint32_t)((div_factor2 - div_factor2_int) * 1000); uint32_t clk_divide2 = div_factor2_int | (div_factor2_frac << 8); XClk_Wiz_WriteReg(clk_cfg_ptr->BaseAddr, CLK_CFG3_OFFSET, clk_divide2); }
// update XClk_Wiz_WriteReg(clk_cfg_ptr->BaseAddr, CLK_CFG23_OFFSET, 0x00000003);
// wait for lock while (1) { status = XClk_Wiz_ReadReg(clk_cfg_ptr->BaseAddr, CLK_SR_OFFSET); if (status & 0x00000001) // Bit0 Locked return true;
usleep(1000); }
return false;}
main.c:
xxxxxxxxxx
// camera0 VDMA device ID// camera1 VDMA device ID// HDMI VDMA device ID// LCD VDMA device ID// HDMI VTC device ID// LCD VTC device ID// HDMI clock wiz device ID// LCD clock wiz device ID
// RGB888 => 3bytes
//frame buffer addressunsigned int const cam0_frame_buffer_addr = (XPAR_PS7_DDR_0_S_AXI_BASEADDR + 0x1000000);unsigned int const disp_frame_buffer_addr = cam0_frame_buffer_addr;unsigned int cam1_frame_buffer_addr;
XAxiVdma cam0_vdma;XAxiVdma cam1_vdma;XAxiVdma hdmi_vdma;XAxiVdma lcd_vdma;DisplayCtrl hdmi_disp_ctrl;DisplayCtrl lcd_disp_ctrl;// VideoMode *vd_mode = &VMODE_1024x600;VideoMode *vd_mode = &VMODE_1280x720;
int main(void){ u32 status0,status1; u16 cmos_h_pixel; u16 cmos_v_pixel; u16 total_h_pixel; u16 total_v_pixel;
if (vd_mode == &VMODE_800x480) { total_h_pixel = 1800; total_v_pixel = 600; } else if (vd_mode == &VMODE_1024x600) { total_h_pixel = 2200; total_v_pixel = 1000; } else if (vd_mode == &VMODE_1280x720) { total_h_pixel = 2570; total_v_pixel = 980; }
Xil_DCacheDisable();
cam1_frame_buffer_addr = cam0_frame_buffer_addr + vd_mode->width * BYTES_PIXEL/2;
emio_init(); status0 = ov5640_init(CAM0_CH0,vd_mode->width/2, vd_mode->height, total_h_pixel, total_v_pixel);
status1 = ov5640_init(CAM1_CH1,vd_mode->width/2, vd_mode->height, total_h_pixel, total_v_pixel);
if(status0 == 0 && status1 == 0) xil_printf("Dual OV5640 detected successful!\r\n"); else xil_printf("Dual OV5640 detected failed!\r\n");
//CAM0 VDMA run_vdma_frame_buffer(&cam0_vdma, CAM0_VDMA_ID, vd_mode->width, vd_mode->height, cam0_frame_buffer_addr,0,0,ONLY_WRITE); //CAM1 VDMA run_vdma_frame_buffer(&cam1_vdma, CAM1_VDMA_ID, vd_mode->width, vd_mode->height, cam1_frame_buffer_addr,0,0,ONLY_WRITE);
//HDMI run_vdma_frame_buffer(&hdmi_vdma, HDMI_VDMA_ID, vd_mode->width, vd_mode->height, disp_frame_buffer_addr,0,0,ONLY_READ); clk_wiz_cfg(HDMI_CLK_WIZ_ID, vd_mode->freq, vd_mode->freq2); DisplayInitialize(&hdmi_disp_ctrl, HDMI_VTC_ID); DisplaySetMode(&hdmi_disp_ctrl, vd_mode); DisplayStart(&hdmi_disp_ctrl);
// //LCD // run_vdma_frame_buffer(&lcd_vdma, LCD_VDMA_ID, vd_mode->width, vd_mode->height, // disp_frame_buffer_addr,0,0,ONLY_READ);
// clk_wiz_cfg(LCD_CLK_WIZ_ID, vd_mode->freq); // DisplayInitialize(&lcd_disp_ctrl, LCD_VTC_ID); // DisplaySetMode(&lcd_disp_ctrl, vd_mode); // DisplayStart(&lcd_disp_ctrl);
while(1) { } return 0;}
Подключите HDMI, LCD и плату разработки ZYNQ.
Используйте TYPE-C для подключения порта JTAG платы разработки к компьютеру, выполните сборку и отладку, и наблюдайте за изображением на дисплее HDMI или LCD.